widget: Add a resize_needed flag
authorBenjamin Otte <otte@redhat.com>
Mon, 28 Sep 2015 00:19:25 +0000 (02:19 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 28 Oct 2015 18:44:28 +0000 (19:44 +0100)
... and API to set and unset it.

It is set when gtk_widget_queue_resize() is called.
It is unset when gtk_widget_get_preferred_width/height() is called.

So far it is not used.

gtk/gtksizerequest.c
gtk/gtkwidget.c
gtk/gtkwidgetprivate.h

index 393af7c72bcbd97d4441ac69c6c21a7096612d4b..eb46bd681fdd68da15edcedc8f2c9057c519bec9 100644 (file)
@@ -149,6 +149,8 @@ gtk_widget_query_size_for_orientation (GtkWidget        *widget,
   gint nat_baseline = -1;
   gboolean found_in_cache;
 
+  gtk_widget_ensure_resize (widget);
+
   if (gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_CONSTANT_SIZE)
     for_size = -1;
 
index 4b341530393148fad29237f2e98751d06daea189..f6c7699b169c5a23b4875ce98aef652305ec8859 100644 (file)
@@ -16161,7 +16161,19 @@ gtk_widget_queue_resize_on_widget (GtkWidget *widget)
 {
   GtkWidgetPrivate *priv = widget->priv;
 
+  priv->resize_needed = TRUE;
   priv->alloc_needed = TRUE;
+}
+
+void
+gtk_widget_ensure_resize (GtkWidget *widget)
+{
+  GtkWidgetPrivate *priv = widget->priv;
+
+  if (!priv->resize_needed)
+    return;
+
+  priv->resize_needed = FALSE;
   _gtk_size_request_cache_clear (&priv->requests);
 }
 
index aa692303015d8cfdc2be6a3b255ed0e84fa52b7c..2e02308eea86b263ec26c8d23fb8dc37a8b0f8c5 100644 (file)
@@ -167,6 +167,7 @@ void         _gtk_widget_set_shadowed       (GtkWidget *widget,
                                              gboolean   shadowed);
 gboolean     _gtk_widget_get_alloc_needed   (GtkWidget *widget);
 void         gtk_widget_queue_resize_on_widget (GtkWidget *widget);
+void         gtk_widget_ensure_resize       (GtkWidget *widget);
 void         _gtk_widget_draw               (GtkWidget *widget,
                                             cairo_t   *cr);
 void          _gtk_widget_scale_changed     (GtkWidget *widget);